package com.atguigu.lease.common.utils;

import io.jsonwebtoken.*;
import io.jsonwebtoken.security.Keys;

import javax.crypto.SecretKey;
import java.util.Date;

public class JwtUtil {

    //M0PKKI6pYGVWWfDZw90a0lTpGYX1d4AQ 称之为 秘钥，是不可以公布的 。 将来我们就是通过这个秘钥去判断token是否被篡改
    private static SecretKey key = Keys.hmacShaKeyFor("M0PKKI6pYGVWWfDZw90a0lTpGYX1d4AQ".getBytes());
    //private static SecretKey key = Keys.secretKeyFor(SignatureAlgorithm.HS256);

    //1. 生成token，在负载中包含用户id和用户名
    public static String createToken(Long userId , String username){
        // JWT包含三个部分： 头部、负载、签名
        return Jwts.builder()
                .setSubject("USER_INFO")  // 主题
                .setExpiration(new Date(System.currentTimeMillis()+60*60*1000))  // 过期时间
                .setIssuer("atguigu")  // 签发者
                .claim("userId",userId)  // 自定义的负载信息
                .claim("username",username)  // 自定义的负载信息
                .signWith(key)    // 签名
                .compressWith(CompressionCodecs.GZIP)
                .compact();
    }

    //2. 解析token，从token中获取用户id以及用户名
    public static Claims parseToken(String token){
        return Jwts.parserBuilder()
                .setSigningKey(key)
                .build()
                .parseClaimsJws(token)
                .getBody();
    }

}
